//Test_1:传递临时变量作为参数给工作线程入口函数

#include<iostream>
#include<pthread.h>
#include<unistd.h>

using namespace std;

// 工作线程的入口函数
void* pthread_start(void* arg)
{
    int* i = (int*)arg;
    // 工作线程死循环不退出
    cout << "I'm a work thread!" << *i  << endl;
    sleep(1); 
}
int main()
{
    for(int i = 0; i < 5; ++i)
    {
        //1.创建一个工作线程
        pthread_t thread;
        
        //这种直接将main的栈上的局部变量作为参数传递给工作线程非常不安全
        //有可能当变量i跳出for循环时，变量i地址的访问已不合法
        //但工作线程仍会访问局部变量i
        int ret = pthread_create(&thread, NULL, pthread_start, (void*)&i);
        if(ret < 0)
        {
            cout << "pthread_create Error!" << endl;
            return 0;
        }
        // 如果让主线程每隔1s再创建新线程，这样新线程就可以在i还未更新的情况得到CPU资源
        sleep(1);
    }
    //2.主线程循环不退出，观察线程信息
    while(1)
    {
        cout << "I'm a main thread!" << endl;
        sleep(1);
    }
    return 0;
}
